#ifndef _BEEP_ALERT_MANAGER_H_
#define _BEEP_ALERT_MANAGER_H_

#include "./BSP/BEEP/beep.h"

/* -------------------------------------------- 报警提示音状态定义 -------------------------------------------- */

typedef enum
{
    ALERT_STATE_IDLE = 0,   /* 空闲状态 */
    ALERT_STATE_PLAYING,    /* 播放中 */
    ALERT_STATE_PAUSED,     /* 暂停 */
    ALERT_STATE_STOPPED     /* 停止 */
} alert_state_e;

/* -------------------------------------------- 报警提示音类型定义 -------------------------------------------- */

typedef enum
{
    ALERT_TYPE_NONE = 0,/* 无提示音 */
    ALERT_TYPE_WARNING, /* 警告音 */
    ALERT_TYPE_NORMAL,  /* 一般提示音 */
    ALERT_TYPE_URGENT,  /* 紧急提示音 */
    ALERT_TYPE_SUCCESS, /* 成功提示音 */
    ALERT_TYPE_ERROR,   /* 错误提示音 */
    ALERT_TYPE_NOTIFY,  /* 通知提示音 */
    ALERT_TYPE_CUSTOM,  /* 自定义提示音 */
    ALERT_TYPE_MAX
} alert_type_e;

/* -------------------------------------------- 报警提示音控制结构体 -------------------------------------------- */

typedef struct
{
    alert_state_e state;    /* 播放状态 */
    alert_type_e type;      /* 提示音类型 */
    uint32_t freq;          /* 频率 */
    uint16_t duration;      /* 单次持续时间 */
    uint16_t interval;      /* 间隔时间 */
    uint8_t count;          /* 重复次数 */
    uint8_t current_count;  /* 当前播放次数 */
    uint16_t tic;           /* 状态更新计时器 */
    uint8_t volume;         /* 音量 */
    uint8_t is_beeping;     /* 当前是否在响 */
    uint8_t isSetCount : 1; /* 是否设置了次数限制 */
    uint8_t reserved : 7;   /* 保留位 */
} alert_player_t;

/* -------------------------------------------- 函数声明 ---------------------------------------------- */

/* 报警提示音管理器函数 */
void FML_ALERT_Init(void);
void ALERT_Test(void);              /* 测试报警提示音管理器 */
void ALERT_Scan(uint32_t sysTime);  /* 报警提示音扫描函数 */

/* 报警提示音控制函数 */
void ALERT_Play(alert_type_e type);
void ALERT_PlayCustom(uint32_t freq, uint8_t volume, uint8_t count, ...);
void ALERT_PlayCustomWithCount(uint32_t freq, uint8_t volume, uint8_t count, uint8_t repeat_count, ...);
void ALERT_PlayCustomInfinite(uint32_t freq, uint8_t volume, ...);  /* 无限循环播放 */

/* 报警函数 */
void ALERT_Beep(uint32_t freq, uint16_t time);                          /* 简单蜂鸣 */
void ALERT_BeepWithCount(uint32_t freq, uint16_t time, uint8_t count);  /* 有限次数蜂鸣 */

/* 报警提示音控制函数 */
void ALERT_Stop(void);      /* 停止报警提示音 */
void ALERT_Pause(void);     /* 暂停报警提示音 */
void ALERT_Resume(void);    /* 恢复报警提示音 */

/* 报警提示音状态查询函数 */
alert_state_e ALERT_GetState(void);         /* 获取报警提示音状态 */
uint8_t ALERT_IsPlaying(void);              /* 判断是否正在播放报警提示音 */
alert_type_e ALERT_GetCurrentType(void);    /* 获取当前报警提示音类型 */

#endif
